package main

import "fmt"

/*
1、map是引用类型，遵守引用类型传递的机制，在一个函数接收map，修改后，会直接修改原来的map
2、map的容量达到后，再想map增加元素，会自动扩容，并不会发生panic，也就是说map能动态增长 键值对(key-value)
3、map的value也经常使用struct类型，更适合管理复杂的数据(比以前value是一个map更好)，比如value为Student结构体
*/
func modify(map1 map[int]int) {
	map1[10] = 900
}

//定义一个学生结构体
type Stu struct {
	Name    string
	Age     int
	Address string
}

func main() {
	//1是引用类型
	map1 := make(map[int]int)
	map1[1] = 90
	map1[2] = 88
	map1[10] = 2
	modify(map1)
	fmt.Println(map1)

	//3
	students := make(map[string]Stu, 10)
	stu1 := Stu{"tom", 18, "武汉"}
	stu2 := Stu{"mary", 28, "湖北"}
	students["no1"] = stu1
	students["no2"] = stu2
	fmt.Println(students)

	//遍历各个学生的信息
	for k, v := range students {
		fmt.Printf("学生的编号是%v\n", k)
		fmt.Printf("学生的名字是%v\n", v.Name)
		fmt.Printf("学生的年龄是%v\n", v.Age)
		fmt.Printf("学生的地址是%v\n", v.Address)
		fmt.Println()
	}

}
